"""
多态
不同的子类对象调用相同的父类方法，产生不同的执行结果
以继承和重写父类方法为前提
灵活
是调用方法的技巧，不会影响到类的内部设计
"""

#实例

class Dog(object):
    def __init__(self,name):
        self.name = name
    def game(self):
        print("{}在玩耍".format(self.name))

class Person(object):
    def __init__(self,name):
        self.name = name
    def game_with_dog(self,dog):
        print("{}正在陪{}玩".format(self.name,dog.name))
        dog.game()

class Xdog(Dog):
    def game(self):
        print("{}玩耍并且在发光".format(self.name))


gou = Dog("狗")#使用dog生成一个狗的对象
ren = Person("人")
ren.game_with_dog(gou)#传入狗

xgou = Xdog("牛批的狗")#使用xdog生成一个x狗的对象
ren.game_with_dog(xgou)#传入x狗

# 只需要改写不同狗的类，不需要对人进行改写，
# 调用相同的方法，达到不同的结果


"""
在Person类中只需要让狗对象调用game方法，而不关心具体是什么狗
game方法是在dog父类中定义的
在程序执行中传入不同的狗对象实参，以达到不同的执行效果
"""